/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.entity;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;



/**
 *
 * @author Jaimoto
 */
@Entity
@Table(name="ciudad")
public class Ciudad implements Serializable,Cloneable{

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_CIUDAD")
    @SequenceGenerator(name = "SEQ_CIUDAD", allocationSize = 1, sequenceName = "ciudad_seq")
    private Long idCiudad;
    
    private String nombre;

    @ManyToOne(cascade=CascadeType.PERSIST)
    @JoinColumn(name="idDepartamento")
    private Departamento departamento;

    public Ciudad(String nombre) {
        this.nombre = nombre;
    }

   public Ciudad() {
   }


    @Override
    public Object clone() throws CloneNotSupportedException {
        Ciudad c = new Ciudad();
        c.setDepartamento(this.getDepartamento());
        c.setIdCiudad(this.getIdCiudad());
        c.setNombre(this.getNombre());
        return super.clone();
    }

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Ciudad &&  ((Ciudad)obj).getIdCiudad() == this.getIdCiudad())
            return true;
        return false;
    }

    @Override
    public int hashCode() {
        if(this.getIdCiudad() == null)
            return 0;
        return this.getIdCiudad().hashCode();
        
    }

    /**
     * @return the idCiudad
     */
    public Long getIdCiudad() {
        return idCiudad;
    }

    /**
     * @param idCiudad the idCiudad to set
     */
    public void setIdCiudad(Long idCiudad) {
        this.idCiudad = idCiudad;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the departamento
     */
    public Departamento getDepartamento() {
        return departamento;
    }

    /**
     * @param departamento the departamento to set
     */
    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }
}
